// api/modules/user.js - 用户模块API
import request from '../index'

export default {
  // 获取当前用户信息
  getUserInfo() {
    return request.get('/user/info')
  },
  
  // 更新用户信息
  updateUserInfo(data) {
    return request.put('/user/info', data)
  },
  
  // 请将这段代码完全替换到 api/modules/user.js 中的 updateAvatar 函数
  // 更新用户头像 - 修复版
  updateAvatar(filePath) {
    // 检查文件路径是否有效
    if (!filePath) {
      console.error('上传头像错误: 文件路径为空')
      return Promise.reject(new Error('文件路径不能为空'))
    }
    
    // 获取用户ID和Token
    const userId = uni.getStorageSync('userId')
    const token = uni.getStorageSync('token')
    const formData = { userId }
    
    console.log('准备上传头像，文件路径:', filePath)
    
    // 获取API基础URL - 使用完整路径而不是依赖getBaseUrl方法
    // 根据你的环境配置，使用正确的基础URL
    const baseUrl = 'https://gushu.szxhdkj.com' // 或者你的实际API基础URL
    
    // 使用原生uni.uploadFile，而不是封装的request
    return new Promise((resolve, reject) => {
      uni.uploadFile({
        url: baseUrl + '/file/avatar',
        filePath: filePath,
        name: 'file',
        formData: formData,
        header: {
          'Authorization': 'Bearer ' + token
        },
        success: (uploadRes) => {
          console.log('原始上传响应:', uploadRes)
          
          if (uploadRes.statusCode !== 200) {
            return reject(new Error('上传失败: HTTP ' + uploadRes.statusCode))
          }
          
          try {
            // 解析JSON字符串
            const responseData = JSON.parse(uploadRes.data)
            console.log('解析后的响应:', responseData)
            
            if (!responseData.success || responseData.code !== 200) {
              return reject(new Error('上传失败: ' + (responseData.message || '未知错误')))
            }
            
            if (!responseData.data || !responseData.data.url) {
              return reject(new Error('上传成功但未返回URL'))
            }
            
            const avatarUrl = responseData.data.url
            console.log('提取的头像URL:', avatarUrl)
            
            // 第二步：明确调用更新用户信息API - 使用原始request
            request.put('/user/info', { avatar: avatarUrl })
              .then(updateRes => {
                console.log('用户信息更新响应:', updateRes)
                resolve({
                  success: true,
                  avatarUrl: avatarUrl,
                  updateResult: updateRes
                })
              })
              .catch(updateErr => {
                console.error('更新用户信息失败:', updateErr)
                reject(updateErr)
              })
          } catch (parseError) {
            console.error('解析响应失败:', parseError)
            reject(new Error('解析响应失败: ' + parseError.message))
          }
        },
        fail: (err) => {
          console.error('上传请求失败:', err)
          reject(err)
        }
      })
    })
  },
  
  updateAvatar(filePath) {
    // 检查文件路径是否有效
    if (!filePath) {
      console.error('上传头像错误: 文件路径为空')
      return Promise.reject(new Error('文件路径不能为空'))
    }
    
    // 获取用户ID和Token
    const userId = uni.getStorageSync('userId')
    const token = uni.getStorageSync('token')
    const formData = { userId }
    
    console.log('准备上传头像，文件路径:', filePath)
    
    // 使用原生uni.uploadFile，而不是封装的request
    return new Promise((resolve, reject) => {
      uni.uploadFile({
        url: request.getBaseUrl() + '/file/avatar',
        filePath: filePath,
        name: 'file',
        formData: formData,
        header: {
          'Authorization': 'Bearer ' + token
        },
        success: (uploadRes) => {
          console.log('原始上传响应:', uploadRes)
          
          if (uploadRes.statusCode !== 200) {
            return reject(new Error('上传失败: HTTP ' + uploadRes.statusCode))
          }
          
          try {
            // 解析JSON字符串
            const responseData = JSON.parse(uploadRes.data)
            console.log('解析后的响应:', responseData)
            
            if (!responseData.success || responseData.code !== 200) {
              return reject(new Error('上传失败: ' + (responseData.message || '未知错误')))
            }
            
            if (!responseData.data || !responseData.data.url) {
              return reject(new Error('上传成功但未返回URL'))
            }
            
            const avatarUrl = responseData.data.url
            console.log('提取的头像URL:', avatarUrl)
            
            // 第二步：明确调用更新用户信息API
            request.put('/user/info', { avatar: avatarUrl })
              .then(updateRes => {
                console.log('用户信息更新响应:', updateRes)
                resolve({
                  success: true,
                  avatarUrl: avatarUrl,
                  updateResult: updateRes
                })
              })
              .catch(updateErr => {
                console.error('更新用户信息失败:', updateErr)
                reject(updateErr)
              })
          } catch (parseError) {
            console.error('解析响应失败:', parseError)
            reject(new Error('解析响应失败: ' + parseError.message))
          }
        },
        fail: (err) => {
          console.error('上传请求失败:', err)
          reject(err)
        }
      })
    })
  },
  
  // 处理微信小程序的头像选择事件
  updateAvatarFromWechat(avatarInfo) {
    console.log('收到微信头像信息:', avatarInfo)
    
    // 检查avatarInfo是否包含有效的头像URL
    if (!avatarInfo || !avatarInfo.avatarUrl) {
      console.error('微信头像信息无效:', avatarInfo)
      return Promise.reject(new Error('微信头像信息无效'))
    }
    
    // 对于微信小程序，可能直接返回了头像URL而不是本地文件路径
    // 这种情况下，我们需要先下载头像到本地临时文件，然后再上传
    return new Promise((resolve, reject) => {
      uni.downloadFile({
        url: avatarInfo.avatarUrl,
        success: (res) => {
          if (res.statusCode === 200) {
            const tempFilePath = res.tempFilePath
            console.log('头像已下载到临时文件:', tempFilePath)
            
            // 使用临时文件路径上传头像
            this.updateAvatar(tempFilePath)
              .then(resolve)
              .catch(reject)
          } else {
            console.error('下载头像失败:', res)
            reject(new Error('下载头像失败'))
          }
        },
        fail: (err) => {
          console.error('下载头像请求失败:', err)
          reject(err)
        }
      })
    })
  },
  
	// 更新昵称和头像
	updateNicknameAndAvatar(nickname, avatar) {
	  const data = {}
	  if (nickname) data.nickname = nickname
	  if (avatar) data.avatar = avatar
	  // 改成调用已存在的 /user/info 接口
	  return request.put('/user/info', data)
	},
  
  // 获取用户统计数据
  getUserStats() {
    return request.get('/user/stats')
  },
  
  // 获取用户token使用量
  getTokenUsage() {
    return request.get('/user/token-usage')
  },
  
  // 获取每日token使用量
  getDailyTokenUsage() {
    return request.get('/user/daily-token-usage')
  },
  
  // 检查用户token使用量是否超限
  checkTokenLimit() {
    return request.get('/user/check-token-limit')
  },
  
  // 获取用户会员信息
  getVipInfo() {
    return request.get('/user/vip-info')
  }
}